package com.topwalk;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

/**
 * 纯Java文件操作工具，支持文件、文件夹的复制、删除、移动操作。
 * <p>
 * -----------------------------------------------------------------------------
 * <p>
 * 工程名 ： IWP
 * <p>
 * 授权 : (C) Copyright TopWalk Corporation 2011
 * <p>
 * 公司 : 北京天行网安信息技术有限责任公司
 * <p>
 * -----------------------------------------------------------------------------
 * <p>
 * <font color="#FF0000">注意: 本内容仅限于北京天行网安公司内部使用，禁止转发</font>
 * <p>
 * @version 1.0
 * @author 张华永
 * @lastModify 2011-11-11
 * @since JDK1.6
 */
public class FileUtil {

	public static void main(String args[]) throws IOException {
		System.out.print("请输入源文件路径：");
		Scanner scanner = new Scanner(System.in);
		String dir = scanner.next();
		System.out.print("请输入目的路径：");
		String toDir = scanner.next();	
		move(new File(dir), new File(toDir));
		System.out.println("移动完成。");
	}
	
	public static void FileUtilMain(String dir,String toDir) throws IOException{
		move(new File(dir), new File(toDir));
		System.out.println("移动完成。");
	}

	/**
	 * 删除文件（夹）
	 * 
	 * @param file 文件（夹）
	 */
	public static void delete(File file) {
		if (!file.exists())
			return;
		if (file.isFile()) {
			file.delete();
		} else {
			for (File f : file.listFiles()) {
				delete(f);
			}
			file.delete();
		}
	}

	/**
	 * 复制文件（夹）到一个目标文件夹
	 * 
	 * @param resFile 源文件（夹）
	 * @param objFolderFile 目标文件夹
	 * @throws IOException 异常时抛出
	 */
	public static void copy(File resFile, File objFolderFile)
			throws IOException {
		if (!resFile.exists())
			return;
		if (!objFolderFile.exists())
			objFolderFile.mkdirs();
		if (resFile.isFile()) {
			File objFile = new File(objFolderFile.getPath() + File.separator
					+ resFile.getName());
			// 复制文件到目标地
			InputStream ins = new FileInputStream(resFile);
			FileOutputStream outs = new FileOutputStream(objFile);
			byte[] buffer = new byte[1024 * 512];
			int length;
			while ((length = ins.read(buffer)) != -1) {
				outs.write(buffer, 0, length);
			}
			ins.close();
			outs.flush();
			outs.close();
		} else {
			String objFolder = objFolderFile.getPath() + File.separator
					+ resFile.getName();
			File _objFolderFile = new File(objFolder);
			_objFolderFile.mkdirs();
			for (File sf : resFile.listFiles()) {
				copy(sf, new File(objFolder));
			}
		}
	}

	/**
	 * 将文件（夹）移动到令一个文件夹
	 * 
	 * @param resFile 源文件（夹）
	 * @param objFolderFile 目标文件夹
	 * @throws IOException 异常时抛出
	 */
	public static void move(File resFile, File objFolderFile)
			throws IOException {
		copy(resFile, objFolderFile);
		delete(resFile);
	}
}
